package cn.yougou.common;

import cn.yougou.pojo.YgStorage;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 对象存储服务 MinIo上传工具类
 *
 * @author kups
 * @since  2020-12-5
 */

@Service
public class MinioUtil {

    private static final String url = "http://121.36.30.36:9000";
    private static final String accessKey = "admin";
    private static final String secretKey = "j348admin";
    private static final String bucket = "yougou";


    /**
     * 选择具体存放位置：
     *  所属分类：类目，商品，用户，评论
     *  【注意】 桶是全局唯一的,若要存放到子文件夹则需要把路径加在文件名前。
     * @param
     * @return
     */
    public static String type(int type) {
        if(type == 0){
            return "categoryy/";
        }else if(type == 1){
            return "goods/";
        }else if(type == 2){
            return "user/";
        }else if(type == 3){
            return "comment/";
        }else{
            return "";//存放到跟目录
        }
    }

    /**
     * 公共 上传单个图片
     * 不止于图片！
     * @return 图片对象
     */
    public static YgStorage uploadImage(String imageId , int i, MultipartFile multipartFile) {
        String urls = null;
        YgStorage ygStorage = null;
        try {
            //传输对象
            MinioClient minioClient = new MinioClient(url, accessKey, secretKey);
            //原图片名称
            String oldName =multipartFile.getOriginalFilename();
            //截取图片后缀
            String suffix = oldName.substring(oldName.lastIndexOf(".") + 1,oldName.length());
            //把文件放置MinIo中：桶(文件夹)、文件名、文件流、图片类型(注意：图片类型与后缀不是一回事,如 jpg格式为：img/jpeg)
            minioClient.putObject(bucket, type(i)+imageId +"."+ suffix, multipartFile.getInputStream(), multipartFile.getContentType());
            //拼接完整地址返回
            urls = url+"/"+bucket+"/"+type(i)+imageId+"."+suffix;
            ygStorage = new YgStorage(type(i)+imageId +"."+ suffix,(int) multipartFile.getSize(),multipartFile.getContentType(),urls,new Date(),null,0);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ygStorage;
    }


    /**
     * 批量上传[废弃]
     *
     * @return 图片对象
     */
//    public static List<GoodsPicture> uploadImage(int i, List<MultipartFile> multipartFileList) {
//        List<GoodsPicture> goodsPictures = new ArrayList<>();
//        for (MultipartFile multipartFile : multipartFileList) {
//            goodsPictures.add(uploadImage(i, multipartFile));
//        }
//        return goodsPictures;
//    }

    /**
     * 删除图片
     * @param name 图片名称 如goods_n4mYlcvH.png
     */
    public static boolean delImage(String name) {
        try {
            //获取对minio操作对象
            MinioClient minioClient = new MinioClient(url, accessKey, secretKey);
            //进行删除操作
            minioClient.removeObject(bucket,name);
        } catch (Exception e) {
//            log.error("删除图片失败,路径:" + bucket+ type(i)+name,e);
            e.printStackTrace();
            return false;
        }
        return true;
    }

}
